/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mycompany.jsf2.mb;

import com.mycompany.jsf2.service.IService;
import com.mycompany.jsf2.entity.Pessoa;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;

@Controller
public class CrudBean implements Serializable {

    private Pessoa pessoa = new Pessoa();
    private DataModel listaPessoas;
    @Autowired
    private IService iService;

    public String adiciona() {

        try {

            iService.adiciona(pessoa);
            adicionaMensagem("Feito");
            reiniciaTela();
        } catch (Exception e) {
            adicionaMensagem(e.getMessage());
        }

        return null;
    }

    public String alterar() {

        iService.alterar(pessoa);
        this.reiniciaTela();

        return "index";
    }

    public String deletar() {

        pessoa = (Pessoa) listaPessoas.getRowData();

        iService.deletar(pessoa);

        adicionaMensagem("Feito");

        this.reiniciaTela();

        return null;
    }

    public String preparaAlteracao() {

        pessoa = (Pessoa) listaPessoas.getRowData();

        return "alteracao";
    }

    public void adicionaMensagem(String mensagem) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage facesMessage = new FacesMessage(mensagem);
        facesContext.addMessage(null, facesMessage);
    }

    /**
     * @return the listaPessoas
     */
    public DataModel getListaPessoas() {

        if (listaPessoas == null) {
            listaPessoas = new ListDataModel(iService.retornaListaPessoas());
        }

        return listaPessoas;
    }

    /**
     * @param listaPessoas the listaPessoas to set
     */
    public void setListaPessoas(DataModel listaPessoas) {
        this.listaPessoas = listaPessoas;
    }

    /**
     * @return the pessoa
     */
    public Pessoa getPessoa() {
        return pessoa;
    }

    /**
     * @param pessoa the pessoa to set
     */
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    /**
     * @param iService the iService to set
     */
    public void setiService(IService iService) {
        this.iService = iService;
    }

    private void reiniciaTela() {
        pessoa = new Pessoa();
        listaPessoas = null;
    }
}